﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;

namespace itau.im.negocio
{
    public class CalendarioReguaPMTBS : CalendarioReguaBS, IDisposable
    {
        public CalendarioReguaPMTBS(DateTime dataReferencia, int diasExtensao)
            : base(dataReferencia, diasExtensao)
        {
        }

        protected override void MontarReguaCalendario()
        {
            int contadorDC = 0;
            int contadorDU = 0;
            int mes = 1;

            for (int i = 1; i <= (this.DataFinal - this.DataReferencia).Days; i++)
            {
                contadorDC = i;
                DateTime data = DataReferencia.AddDays(i);

                DateTime dataMensal = DataReferencia.AddMonths(mes);

                contadorDU = IncrementarDiaUtil(contadorDU, data);

                if (data == dataMensal)
                {
                    while (data.DayOfWeek == DayOfWeek.Saturday
                        || data.DayOfWeek == DayOfWeek.Sunday
                        || Feriados.Contains(data.ToString("yyyyMMdd")))
                    {
                        data = data.AddDays(1);
                        i++;
                        contadorDC++;

                        contadorDU = IncrementarDiaUtil(contadorDU, data);
                    }

                    DiaInfo dia = new DiaInfo();
                    dia.Data = data;
                    dia.DiasCorridos = contadorDC;
                    dia.DiasUteis = contadorDU;
                    this.Regua.Add(dia.Data.ToString("yyyyMMdd"), dia);
                    mes++;
                }
            }

            this.NumeroMaxDiasCorridos = contadorDC;
            this.NumeroMaxDiasUteis = contadorDU;
        }

        private int IncrementarDiaUtil(int contadorDU, DateTime data)
        {
            if (data.DayOfWeek != DayOfWeek.Saturday
                && data.DayOfWeek != DayOfWeek.Sunday
                && !Feriados.Contains(data.ToString("yyyyMMdd")))
            {
                contadorDU++;
            }

            return contadorDU;
        }
    }
}
